/**
 * 
 */
package com.et114.modules.products.digitalTv.services;

import java.util.List;

import com.et114.components.simpletable.DataList;
import com.et114.core.services.impl.BaseServicesImpl;
import com.et114.core.utility.FileUploadUtil;
import com.et114.modules.products.commons.Const;
import com.et114.modules.products.commons.Context;
import com.et114.modules.products.digitalTv.dao.DigitalTvDao;
import com.et114.modules.products.digitalTv.vo.DigitalTv;
import com.et114.modules.products.search.SearchService;
import com.et114.modules.products.search.SearchVo;

/*
 * @author guanhw
 */
public class DigitalTvServiceImpl extends BaseServicesImpl {
	private DigitalTvDao digitalTvDao ;
	private SearchService   searchCompass ; 

	public void setDigitalTvDao ( DigitalTvDao digitalTvDao ) {
		this.digitalTvDao = digitalTvDao;
	}
	
	
	public void setSearchCompass ( SearchService searchCompass ) {
		this.searchCompass = searchCompass;
	}


	public DataList getDigitalTvs( DigitalTv vo ) throws Exception {
		return digitalTvDao.getDigitalTvs ( vo ) ;  
	}
	
	public List< DigitalTv > getDigitalTvList( DigitalTv vo ) throws Exception {
		return digitalTvDao.getDigitalTvList ( vo ) ;
	}
	
	public List< DigitalTv > getDigitalTvsHasOffTime( DigitalTv vo ) throws Exception { 
		return digitalTvDao.getDigitalTvsHasOffTime ( vo ) ; 
	}
	
	public Long saveDigitalTv(  DigitalTv vo ) throws Exception { 
		return digitalTvDao.saveDigitalTv ( vo ) ;
	}
	
	public void updateDigitalTv(  DigitalTv vo ) throws Exception { 
		digitalTvDao.updateDigitalTv ( vo ) ; 
		
		DigitalTv cp = getDigitalTvById( vo.getProId ( ) ) ; 
		if ( cp != null ) {
			if ( cp.getProOnOffStatus ( ) == Const.PRO_PUB_STATUS_PUBED ) {
				SearchVo svo = getDigitalTv4Compass ( cp.getProId ( ) ) ; 
				if ( svo != null ) 
					searchCompass.setPro  ( cp.getProId ( ) ,  Const.PRO_TYPE_TV  , svo ) ; 
			}
			else 
				searchCompass.removePro  ( cp.getProId ( ) , Const.PRO_TYPE_TV ) ; 				
		}
	}
	
	public void updateDigitalTvProOnOffStatus( DigitalTv cp ) throws Exception {
		digitalTvDao.updateDigitalTvProOnOffStatus ( cp ) ;
		
		if ( cp != null ) {
			if ( cp.getProOnOffStatus ( ) == Const.PRO_PUB_STATUS_PUBED ) {
				SearchVo svo = getDigitalTv4Compass ( cp.getProId ( ) ) ; 
				if ( svo != null ) 
					searchCompass.setPro  ( cp.getProId ( ) ,  Const.PRO_TYPE_TV  , svo ) ; 
			}
			else 
				searchCompass.removePro  ( cp.getProId ( ) , Const.PRO_TYPE_TV ) ; 				
		}		
	}
	
	public DigitalTv getDigitalTvById( Long id ) throws Exception {  
		return digitalTvDao.getDigitalTvById ( id ) ;
	}
	
	public void removeDigitalTv( Long id ) throws Exception {
		//delete compass
		SearchVo svo = getDigitalTv4Compass ( id ) ; 
		if ( svo != null )
			searchCompass.removePro  ( id , Const.PRO_TYPE_TV ) ; 

		
		DigitalTv tv = getDigitalTvById( id )  ; 
		if ( tv != null ) {
			FileUploadUtil.removeFile ( tv.getDtImage ( ) ) ;
			digitalTvDao.removeDigitalTv ( id ) ;
		}
		Context.removeProContent ( id , Const.PRO_TYPE_TV ) ; 
	}
	
	// 4q 

	
	public DataList getDigitalTvs4View(  DigitalTv vo ) throws Exception { 
		return digitalTvDao.getDigitalTvs4View ( vo ) ; 
	}
	
	public DigitalTv getBasetDigitalTvById4View( Long proId ) throws Exception {
		return getBasetDigitalTvById4View ( proId , Const.PRO_PUB_STATUS_PUBED ) ;
	}
	
	public DigitalTv getBasetDigitalTvById4View( Long proId , Byte proOnOffStatus ) throws Exception {
		DigitalTv vo = new DigitalTv ( );
		vo.setProId ( proId );
		vo.setProOnOffStatus ( proOnOffStatus );
		return digitalTvDao.getBasetDigitalTvById4View ( vo );
	}
	
	public SearchVo getDigitalTv4Compass( Long proId ) {
		return digitalTvDao.getDigitalTv4Compass ( proId ) ;
	}
}
